algorithm basics explained